import type { Response } from 'express';

/**
 * API 响应工具类，封装常用响应格式
 */
export default class Resp {
  /**
   * 捕获并处理异常，按错误类型返回合适响应
   * @param res Express Response 对象
   * @param error 捕获的异常对象
   * @returns Express Response
   */
  static catch(res: Response, error: unknown): Response {
    if (error instanceof Error) {
      switch (error.name) {
        case 'ValidationError':
          return Resp.error(res, 400, '数据验证失败');
        case 'MongoServerError':
          return Resp.error(res, 500, '数据库操作失败');
        case 'CastError':
          return Resp.error(res, 400, '数据格式错误');
        default:
          return Resp.error(res, 500, '服务器内部错误');
      }
    }
    return Resp.error(res, 500, '服务器内部错误');
  }

  /**
   * 返回错误响应
   * @param res Express Response 对象
   * @param code 状态码
   * @param message 错误信息
   * @returns Express Response
   */
  static error(res: Response, code: number, message: string): Response {
    return res.status(code).json({ code, data: null, message, success: false });
  }

  /**
   * 返回成功响应
   * @param res Express Response 对象
   * @param data 返回数据
   * @param message 成功提示信息
   * @returns Express Response
   */
  static success<T>(res: Response, data: T, message: string): Response {
    return res.json({ code: 200, data, message, success: true });
  }
}
